home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / swingall.jar / javax / swing / text / TableView.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-07-15  |  6.4 KB  |  345 lines

  1. package javax.swing.text;
  2.  
  3. import java.awt.Rectangle;
  4. import java.util.BitSet;
  5. import java.util.Vector;
  6. import javax.swing.SizeRequirements;
  7. import javax.swing.text.html.HTML.Attribute;
  8.  
  9. public abstract class TableView extends BoxView {
  10.    int[] columnSpans;
  11.    int[] columnOffsets;
  12.    SizeRequirements[] columnRequirements;
  13.    Vector rows = new Vector();
  14.    boolean gridValid = false;
  15.    private static final BitSet EMPTY = new BitSet();
  16.  
  17.    public TableView(Element var1) {
  18.       super(var1, 1);
  19.    }
  20.  
  21.    // $FF: synthetic method
  22.    static BitSet access$0() {
  23.       return EMPTY;
  24.    }
  25.  
  26.    void addFill(int var1, int var2) {
  27.       TableRow var3 = this.getRow(var1);
  28.       if (var3 != null) {
  29.          var3.fillColumn(var2);
  30.       }
  31.  
  32.    }
  33.  
  34.    void calculateColumnRequirements(int var1) {
  35.       boolean var2 = false;
  36.       int var3 = this.getRowCount();
  37.  
  38.       for(int var4 = 0; var4 < var3; ++var4) {
  39.          TableRow var5 = this.getRow(var4);
  40.          int var6 = 0;
  41.          int var7 = ((CompositeView)var5).getViewCount();
  42.  
  43.          for(int var8 = 0; var8 < var7; ++var6) {
  44.             View var9;
  45.             for(var9 = ((CompositeView)var5).getView(var8); var5.isFilled(var6); ++var6) {
  46.             }
  47.  
  48.             this.getRowsOccupied(var9);
  49.             int var11 = this.getColumnsOccupied(var9);
  50.             if (var11 == 1) {
  51.                this.checkSingleColumnCell(var1, var6, var9);
  52.             } else {
  53.                var2 = true;
  54.                var6 += var11 - 1;
  55.             }
  56.  
  57.             ++var8;
  58.          }
  59.       }
  60.  
  61.       if (var2) {
  62.          for(int var12 = 0; var12 < var3; ++var12) {
  63.             TableRow var13 = this.getRow(var12);
  64.             int var14 = 0;
  65.             int var15 = ((CompositeView)var13).getViewCount();
  66.  
  67.             for(int var16 = 0; var16 < var15; ++var14) {
  68.                View var10;
  69.                for(var10 = ((CompositeView)var13).getView(var16); var13.isFilled(var14); ++var14) {
  70.                }
  71.  
  72.                int var17 = this.getColumnsOccupied(var10);
  73.                if (var17 > 1) {
  74.                   this.checkMultiColumnCell(var1, var14, var17, var10);
  75.                   var14 += var17 - 1;
  76.                }
  77.  
  78.                ++var16;
  79.             }
  80.          }
  81.       }
  82.  
  83.    }
  84.  
  85.    protected SizeRequirements calculateMinorAxisRequirements(int var1, SizeRequirements var2) {
  86.       this.updateGrid();
  87.       this.calculateColumnRequirements(var1);
  88.       if (var2 == null) {
  89.          var2 = new SizeRequirements();
  90.       }
  91.  
  92.       long var3 = 0L;
  93.       long var5 = 0L;
  94.       long var7 = 0L;
  95.  
  96.       for(int var9 = 0; var9 < this.columnRequirements.length; ++var9) {
  97.          SizeRequirements var10 = this.columnRequirements[var9];
  98.          var3 += (long)var10.minimum;
  99.          var5 += (long)var10.preferred;
  100.          var7 += (long)var10.maximum;
  101.       }
  102.  
  103.       var2.minimum = (int)var3;
  104.       var2.preferred = (int)var5;
  105.       var2.maximum = (int)var7;
  106.       var2.alignment = 0.0F;
  107.       return var2;
  108.    }
  109.  
  110.    void checkMultiColumnCell(int var1, int var2, int var3, View var4) {
  111.       long var5 = 0L;
  112.       long var7 = 0L;
  113.       long var9 = 0L;
  114.  
  115.       for(int var11 = 0; var11 < var3; ++var11) {
  116.          SizeRequirements var12 = this.columnRequirements[var2 + var11];
  117.          var5 += (long)var12.minimum;
  118.          var7 += (long)var12.preferred;
  119.          var9 += (long)var12.maximum;
  120.       }
  121.  
  122.       int var20 = (int)var4.getMinimumSpan(var1);
  123.       if ((long)var20 > var5) {
  124.          SizeRequirements[] var13 = new SizeRequirements[var3];
  125.  
  126.          for(int var14 = 0; var14 < var3; ++var14) {
  127.             SizeRequirements var15 = var13[var14] = this.columnRequirements[var2 + var14];
  128.             var15.maximum = Math.max(var15.maximum, (int)var4.getMaximumSpan(var1));
  129.          }
  130.  
  131.          int[] var23 = new int[var3];
  132.          int[] var16 = new int[var3];
  133.          SizeRequirements.calculateTiledPositions(var20, (SizeRequirements)null, var13, var16, var23);
  134.  
  135.          for(int var17 = 0; var17 < var3; ++var17) {
  136.             SizeRequirements var18 = var13[var17];
  137.             var18.minimum = Math.max(var23[var17], var18.minimum);
  138.             var18.preferred = Math.max(var18.minimum, var18.preferred);
  139.             var18.maximum = Math.max(var18.preferred, var18.maximum);
  140.          }
  141.       }
  142.  
  143.       int var21 = (int)var4.getPreferredSpan(var1);
  144.       if ((long)var21 > var7) {
  145.          SizeRequirements[] var22 = new SizeRequirements[var3];
  146.  
  147.          for(int var24 = 0; var24 < var3; ++var24) {
  148.             SizeRequirements var25 = var22[var24] = this.columnRequirements[var2 + var24];
  149.          }
  150.  
  151.          int[] var26 = new int[var3];
  152.          int[] var27 = new int[var3];
  153.          SizeRequirements.calculateTiledPositions(var21, (SizeRequirements)null, var22, var27, var26);
  154.  
  155.          for(int var28 = 0; var28 < var3; ++var28) {
  156.             SizeRequirements var19 = var22[var28];
  157.             var19.preferred = Math.max(var26[var28], var19.preferred);
  158.             var19.maximum = Math.max(var19.preferred, var19.maximum);
  159.          }
  160.       }
  161.  
  162.    }
  163.  
  164.    void checkSingleColumnCell(int var1, int var2, View var3) {
  165.       SizeRequirements var4 = this.columnRequirements[var2];
  166.       var4.minimum = Math.max((int)var3.getMinimumSpan(var1), var4.minimum);
  167.       var4.preferred = Math.max((int)var3.getPreferredSpan(var1), var4.preferred);
  168.       var4.maximum = Math.max((int)var3.getMaximumSpan(var1), var4.maximum);
  169.    }
  170.  
  171.    protected TableCell createTableCell(Element var1) {
  172.       return new TableCell(this, var1);
  173.    }
  174.  
  175.    protected TableRow createTableRow(Element var1) {
  176.       return new TableRow(this, var1);
  177.    }
  178.  
  179.    int getColumnCount() {
  180.       return this.columnSpans.length;
  181.    }
  182.  
  183.    int getColumnSpan(int var1) {
  184.       return this.columnSpans[var1];
  185.    }
  186.  
  187.    int getColumnsOccupied(View var1) {
  188.       AttributeSet var2 = var1.getElement().getAttributes();
  189.       String var3 = (String)var2.getAttribute(Attribute.COLSPAN);
  190.       if (var3 != null) {
  191.          try {
  192.             return Integer.parseInt(var3);
  193.          } catch (NumberFormatException var4) {
  194.          }
  195.       }
  196.  
  197.       return 1;
  198.    }
  199.  
  200.    TableRow getRow(int var1) {
  201.       return var1 < this.rows.size() ? (TableRow)this.rows.elementAt(var1) : null;
  202.    }
  203.  
  204.    int getRowCount() {
  205.       return this.rows.size();
  206.    }
  207.  
  208.    int getRowSpan(int var1) {
  209.       TableRow var2 = this.getRow(var1);
  210.       return var2 != null ? (int)((View)var2).getPreferredSpan(1) : 0;
  211.    }
  212.  
  213.    int getRowsOccupied(View var1) {
  214.       AttributeSet var2 = var1.getElement().getAttributes();
  215.       String var3 = (String)var2.getAttribute(Attribute.ROWSPAN);
  216.       if (var3 != null) {
  217.          try {
  218.             return Integer.parseInt(var3);
  219.          } catch (NumberFormatException var4) {
  220.          }
  221.       }
  222.  
  223.       return 1;
  224.    }
  225.  
  226.    protected View getViewAtPosition(int var1, Rectangle var2) {
  227.       int var3 = ((CompositeView)this).getViewCount();
  228.  
  229.       for(int var4 = 0; var4 < var3; ++var4) {
  230.          View var5 = ((CompositeView)this).getView(var4);
  231.          int var6 = var5.getStartOffset();
  232.          int var7 = var5.getEndOffset();
  233.          if (var1 >= var6 && var1 < var7) {
  234.             if (var2 != null) {
  235.                ((BoxView)this).childAllocation(var4, var2);
  236.             }
  237.  
  238.             return var5;
  239.          }
  240.       }
  241.  
  242.       if (var1 == ((View)this).getEndOffset()) {
  243.          View var8 = ((CompositeView)this).getView(var3 - 1);
  244.          if (var2 != null) {
  245.             ((BoxView)this).childAllocation(var3 - 1, var2);
  246.          }
  247.  
  248.          return var8;
  249.       } else {
  250.          return null;
  251.       }
  252.    }
  253.  
  254.    void invalidateGrid() {
  255.       this.gridValid = false;
  256.    }
  257.  
  258.    protected void layoutColumns(int var1, int[] var2, int[] var3, SizeRequirements[] var4) {
  259.       SizeRequirements.calculateTiledPositions(var1, (SizeRequirements)null, var4, var2, var3);
  260.    }
  261.  
  262.    protected void layoutMinorAxis(int var1, int var2, int[] var3, int[] var4) {
  263.       this.updateGrid();
  264.       int var5 = this.getRowCount();
  265.  
  266.       for(int var6 = 0; var6 < var5; ++var6) {
  267.          TableRow var7 = this.getRow(var6);
  268.          ((BoxView)var7).layoutChanged(var2);
  269.       }
  270.  
  271.       this.layoutColumns(var1, this.columnOffsets, this.columnSpans, this.columnRequirements);
  272.       super.layoutMinorAxis(var1, var2, var3, var4);
  273.    }
  274.  
  275.    public void replace(int var1, int var2, View[] var3) {
  276.       super.replace(var1, var2, var3);
  277.       this.invalidateGrid();
  278.    }
  279.  
  280.    void updateGrid() {
  281.       if (!this.gridValid) {
  282.          this.rows.removeAllElements();
  283.          int var1 = ((CompositeView)this).getViewCount();
  284.  
  285.          for(int var2 = 0; var2 < var1; ++var2) {
  286.             View var3 = ((CompositeView)this).getView(var2);
  287.             if (var3 instanceof TableRow) {
  288.                this.rows.addElement(var3);
  289.                TableRow var4 = (TableRow)var3;
  290.                var4.clearFilledColumns();
  291.                var4.setRow(var2);
  292.             }
  293.          }
  294.  
  295.          int var16 = 0;
  296.          int var17 = this.rows.size();
  297.  
  298.          for(int var5 = 0; var5 < var17; ++var5) {
  299.             TableRow var6 = this.getRow(var5);
  300.             int var7 = 0;
  301.  
  302.             for(int var8 = 0; var8 < ((CompositeView)var6).getViewCount(); ++var7) {
  303.                View var9;
  304.                for(var9 = ((CompositeView)var6).getView(var8); var6.isFilled(var7); ++var7) {
  305.                }
  306.  
  307.                int var10 = this.getRowsOccupied(var9);
  308.                int var11 = this.getColumnsOccupied(var9);
  309.                if (var11 > 1 || var10 > 1) {
  310.                   int var12 = var5 + var10;
  311.                   int var13 = var7 + var11;
  312.  
  313.                   for(int var14 = var5; var14 < var12; ++var14) {
  314.                      for(int var15 = var7; var15 < var13; ++var15) {
  315.                         if (var14 != var5 || var15 != var7) {
  316.                            this.addFill(var14, var15);
  317.                         }
  318.                      }
  319.                   }
  320.  
  321.                   if (var11 > 1) {
  322.                      var7 += var11 - 1;
  323.                   }
  324.                }
  325.  
  326.                ++var8;
  327.             }
  328.  
  329.             var16 = Math.max(var16, var7 + 1);
  330.          }
  331.  
  332.          this.columnSpans = new int[var16];
  333.          this.columnOffsets = new int[var16];
  334.          this.columnRequirements = new SizeRequirements[var16];
  335.  
  336.          for(int var18 = 0; var18 < var16; ++var18) {
  337.             this.columnRequirements[var18] = new SizeRequirements();
  338.          }
  339.  
  340.          this.gridValid = true;
  341.       }
  342.  
  343.    }
  344. }
  345.